'use strict';
/**
 * 此处建议只改下订单状态，保证能及时返回给第三方支付服务器成功状态
 * 限制4秒内必须执行完全部的异步回调逻辑，建议将消息发送、返佣、业绩结算等业务逻辑异步处理（如用定时任务去处理这些异步逻辑）
 * 特别注意：因为金额是前端传的，需要再判断下金额和你业务系统订单中的金额是否一致，如果不一致，直接返回 return false;
 * 特别注意：因为金额是前端传的，需要再判断下金额和你业务系统订单中的金额是否一致，如果不一致，直接返回 return false;
 * 特别注意：因为金额是前端传的，需要再判断下金额和你业务系统订单中的金额是否一致，如果不一致，直接返回 return false;
 */
const config = require('../config/index.js')
module.exports = async (obj) => {
	console.log('goods支付回调')
	let user_order_success = true;
	let { data = {} } = obj;
	let {
		order_no,
		out_trade_no,
		paid_time,
		custom = {}
	} = data; // uni-pay-orders 表内的数据均可获取到
  console.log(`回调数据：${JSON.stringify(data)}`)
	const dbName = 'avatar-orders'
	// 此处写你自己的支付成功逻辑开始-----------------------------------------------------------
	// 获取你的业务订单信息
  const db = uniCloud.database();
  let orderRes = await db.collection(dbName).where({ _id: order_no }).get();
  let orderInfo = orderRes.data[0];
  let { total_fee, order_type, user_id, template_id } = orderInfo
	// 比对订单信息与支付回调金额是否一致
	if (orderInfo.total_fee === total_fee) {
    // 更新订单信息
		let res = await db.collection(dbName).where({ _id: order_no }).update({
      status: 2
    });

		if (res) {
			user_order_success = true;
		} else {
			user_order_success = false
		}
    
    if (order_type === 'template') {
      // 购买模板插入avatar-user-template
      db.collection('avatar-user-template').add({
        templateId: template_id,
        userId: user_id,
        buyTime: new Date().getTime()
      })
    }
    
    // 邀请分成处理
    let userRes = await db.collection('uni-id-users').where({ _id: user_id }).get();
    let userInfo = userRes.data[0];
    let inviterUserRes = await db.collection('uni-id-users').where({ _id: userInfo.inviter_uid }).get();
    let inviterUserInfo = inviterUserRes.data[0];
   
    let { inviter_uid } = userInfo
    let { downloadRatio, vipDownloadRatio, saleRatio, vipSaleRatio } = config
    console.log(`inviter_uid: ${inviter_uid}----`)
    let ratio = 0
    if (inviterUserInfo.is_svip === 1) {
      if (order_type === 'avatar') {
        ratio = vipDownloadRatio
      } else {
        ratio = vipSaleRatio
      }
    } else {
      if (order_type === 'avatar') {
        ratio = downloadRatio
      } else {
        ratio = saleRatio
      }
    }
    let increMoney = parseInt(ratio * total_fee)
    console.log(`increMoney: ${increMoney}----`)
    await db.collection("uni-id-users").doc(inviterUserInfo._id).update({
      balance: inviterUserInfo.balance + increMoney,
      total_revenue: inviterUserInfo.total_revenue + increMoney
    });
    await db.collection("avatar-earning-detail").add({
      user_id: inviterUserInfo._id,
      amount: increMoney,
      change_class: 1,
      change_scene: order_type === 'avatar' ? 1 : 2,
      created_at: new Date().getTime()
    })
	}
	
	// 此处写你自己的支付成功逻辑结束-----------------------------------------------------------
	return user_order_success;
};
